package com.ddxz.hetong.mapper;

/**
 * class description
 *
 * @author 贾书虫
 * @version 1.0.0
 * @date 2022/8/1
 */

import com.ddxz.hetong.dto.electicity.CostDto;
import com.ddxz.hetong.dto.electicity.OtherDto;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface ElectricityMapper {
    /**
     * 分页获取详情列表
     * @param year 年份
     * @param month 月份
     * @param factory 发电厂名称
     * @param name 指标名称
     * @return 列表
     */
    Page<CostDto> getDetail(@Param("year") Integer year, @Param("month") Integer month,
                            @Param("factory") String factory, @Param("names") List<String> name);

    /**
     * 获取各年、月、发电厂、指标统计值
     * @param year 年份
     * @param month 月份
     * @param factory 发电厂名称
     * @param name 指标名称
     * @param type
     * @return 列表
     */
    List<CostDto> getStatistic(@Param("year") Integer year, @Param("month") Integer month,
                               @Param("factory") String factory, @Param("names") List<String> name,
                               @Param("type") Integer type);

    /**
     * 删除指定年份的数据
     * @param year 年份
     */
    void deleteByYear(@Param("year") Integer year);

    /**
     * 保存Excel中数据
     * @param entities 数据
     */
    void saveYearData(@Param("list") List<CostDto> entities);

    /**
     * 利润与装机容量对比
     * @param year 年份
     * @param month 月份
     * @param names 指标
     * @param type 粒度
     * @return 列表
     */
    List<CostDto> getSampleStatistic(@Param("year") Integer year, @Param("month") Integer month,
                                     @Param("names") List<String> names, @Param("type") Integer type);

    /**
     * 获取各年、月、发电厂、指标统计值
     * @param year 年份
     * @param month 月份
     * @param factory 发电厂名称
     * @param name 指标名称
     * @param type
     * @return 列表
     */
    List<CostDto> getTotalStatistic(@Param("year") Integer year, @Param("month") Integer month,
                                    @Param("factory") String factory, @Param("names") List<String> name,
                                    @Param("type") Integer type);

    /**
     * 阶段指标统计
     * @return 列表
     */
    List<CostDto> getStageHistory(@Param("names") List<String> name);

    /**
     * 年份指标统计
     * @return 列表
     */
    List<CostDto> getYearHistory(@Param("names") List<String> name, @Param("stage") Integer stage);

    /**
     * 获取全部历史指标
     * @return 列表
     */
    List<CostDto> getAllHistory(@Param("names") List<String> name, @Param("stage") Integer stage);

    /**
     * 获取指定的输入指标
     * @param type 类型
     * @param year 年份
     * @param name 指标名
     * @return 列表
     */
    List<CostDto> getTheAblity(@Param("type") Integer type, @Param("year") Integer year, @Param("name") String name);

    /**
     * 删除指定年份的数据，重新从Excel中导入
     * @param year 年份
     */
    void deleteOtherByYear(@Param("year") Integer year);

    /**
     * 将Excel中包含的输入性数据导入到数据库中
     * @param dtoList 数据
     */
    void saveOtherYearData(@Param("list") List<OtherDto> dtoList);

    /**
     * 获取燃料成本之外的成本占比Top5
     * @param year 年份
     * @return 列表
     */
    List<CostDto> getCostTop5(@Param("year") Integer year, @Param("factory") String factory);
}
